<?php
// vim: foldmethod=marker
/**
 *  Xanhte_ActionClass.php
 *
 *  @author     {$author}
 *  @package    Xanhte
 *  @version    $Id: Xanhte_ActionClass.php 195 2008-03-01 15:34:44Z mikhail.miguel $
 */

// {{{ Xanhte_ActionClass
/**
 *  action実行クラス
 *
 *  @author     {$author}
 *  @package    Xanhte
 *  @access     public
 */
class Xanhte_ActionClass extends Ethna_ActionClass
{
	
	/**
     *  アクション実行前の認証処理を行う
     *
     *  @access public
     *  @return string  遷移名(nullなら正常終了, falseなら処理終了)
     */
    function authenticate()
    {
		$ret = parent::authenticate();
		if (is_null($ret)){
			/// xanhteモジュールで設定されているConfigをethna_configにコピーする
			$this->copyConfigFromXanhte();
		}
        return $ret;
    }

    /**
     *  アクション実行前の処理(フォーム値チェック等)を行う
     *
     *  @access public
     *  @return string  遷移名(nullなら正常終了, falseなら処理終了)
     */
    function prepare()
    {
        return parent::prepare();
    }

    /**
     *  アクション実行
     *
     *  @access public
     *  @return string  遷移名(nullなら遷移は行わない)
     */
    function perform()
    {
        return parent::perform();
    }
	
	/// 
	function isGetMethod()
	{
		return strcasecmp('GET', $_SERVER['REQUEST_METHOD'])===0;
	}
	
	
	function &getM($c)
	{
		return $this->backend->getManager($c);
	}
	
	
	/**
	 *	アクションクラスでファイルアップロードの補助
	 *
	 *	@access	protected
	 *  @param  string FILEのフォーム名 配列FormもOK
	 *  @param string  追加した画像に関連付けられているアイテムの種類
	 *  @param string  追加した画像に関連付けられているアイテムのID
	 *  @param サムネイルを作成するかどうか
	 *  @param サムネイルのみ作るかどうか
	 *  @param ファイル名をそのままでアップするかどうか
	 *  @param 元画像をEthna_ConfigのMaxSizeにFitさせるかどうか
	 *	@return	$uploaderオブジェクト
	 */
	function uploadFileAndAddDB($formname, $item, $itemid,
								$delete_before=false, $create_thumb=false, $only_thumb=false, $randum_filename=true, $fit_to_max=false)
	{
		$ethna_config =& $this->backend->getConfig();
		$uploader =& new ITT_Uploader($ethna_config);
		if ($uploader->fetch($formname)){
			$uploader->upload($create_thumb, $only_thumb, $randum_filename, $fit_to_max);
			$uploadfiles =& $uploader->getUploadedData();
			// DBに追加
			$pict_m =& $this->getM('Picture');
			$status = 0;
			$pict_m->addImageFiles($uploadfiles, $item, $itemid, $status);
			
			// アップロードに成功したら前のファイルは消す
			if ($delete_before){
				$pict_m->deleteBeforeImageFiles($uploadfiles, $item, $itemid) ;
			}
		}
		
		// DBとuploadディレクトリのお掃除
		$pict_m =& $this->getM('Picture');
		$image_prop = $ethna_config->get('image_prop');
		$pict_m->garbageFiles($upload_path, $thumb_path, $image_prop['garbageRate'], $image_prop['garbageLifetime']); // お掃除動作頻度は10%
		
		return $uploader;
	}
	
	
	
	/**
	 * xanhteモジュールで設定されているConfigをethna_configにコピーする
	 * @access public
	 * @return null
	 **/
	function copyConfigFromXanhte($dirname='xanhte')
	{
		
	
		$c_handler =& xoops_gethandler('config');
		$xanhte_config = $c_handler->getConfigsByDirname($dirname);
		
		$m_handler =& xoops_gethandler('module');
		$xanhte_module =& $m_handler->getByDirname($dirname);
		$modversion_config = $xanhte_module->getInfo('config');
		$config_option = array();
		foreach ($modversion_config as $mvc){
			if (isset($mvc['options'])){
				$config_option[$mvc['name']] = array_flip($mvc['options']); // ...array_flip... :(
			}
		}
		
		// image_prop
		$allow_type = array('image_mime','image_ext','data_mime','data_ext',);
		foreach ($allow_type as $_type){
			${'allow_'. $_type} = array();
			foreach ($xanhte_config['iprop_allow_'.$_type] as $p){
				if (isset($config_option['iprop_allow_'.$_type][$p])){
					array_push(${'allow_'. $_type}, $config_option['iprop_allow_'.$_type][$p]);
				}
			}
		}

		$ethna_config =& $this->backend->getConfig();
		$image_prop = $ethna_config->get('image_prop');
		$image_prop['upload_path'] = sprintf('%s/%s', XOOPS_ROOT_PATH, trim($xanhte_config['iprop_upload_path'], '/'));
		$image_prop['thumb_path']  = $image_prop['upload_path'].'/thumbnail';
		$image_prop['max_file'] = array(
			'size' => $xanhte_config['iprop_max_file_size'],
			'width' => $xanhte_config['iprop_max_file_width'],
			'height' => $xanhte_config['iprop_max_file_height'],
			);
		$image_prop['fit_to_max'] = $xanhte_config['iprop_fit_to_max'];
		$image_prop['image_resize_soft'] = $xanhte_config['iprop_resize_soft'];
		$image_prop['image_resize_soft_path'] = $xanhte_config['iprop_resize_soft_path'];
		$image_prop['image_resize_rule'] = $xanhte_config['iprop_resize_rule'];
		$image_prop['thumb_prop'] = array(
			'width'  => $xanhte_config['iprop_thumb_file_width'],
			'height' => $xanhte_config['iprop_thumb_file_height'],
			);
		$image_prop['allowed_file_type'] = array(
			// 画像の場合
			'image' => array(
				'mime' => $allow_image_mime,
				'ext'  => $allow_image_ext,
				),
			// データの場合
			'data'  => array(
				'mime' => $allow_data_mime,
				'ext'  => $allow_data_ext,
				),
			);
		$ethna_config->set('image_prop', $image_prop);
		
		return null;
	}
	
	
	/**
	 * 新規投稿の一発目なら、32文字のhashを返す。
	 * @access public
	 * @param	string  そのオブジェクトが取るPrimary Keyのform名
	 * @return string
	 **/
	function createID($id){
		if($this->af->get($id)){
			return $this->af->get($id);
		}
		$seed = mt_rand().$_SERVER['REMOTE_ADDR'].time();
		return md5($seed);
	}
	
	function isNewPost($id){
		if($this->af->get($id)==''){
			return true ;
		}
		if(strlen($this->af->get($id))=="32"){
			return true ;
		}
		return false ;
	}
}
// }}}
?>
